package com.lframework.xingyun.promo.bo.member;

import cn.hutool.core.date.DateUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.lframework.starter.common.constants.StringPool;
import com.lframework.starter.web.core.bo.BaseBo;

import java.math.BigDecimal;
import java.time.LocalDateTime;

import com.lframework.xingyun.promo.entity.MarketingMember;
import io.swagger.annotations.ApiModelProperty;

import lombok.Data;

/**
 * <p>
 * 会员营销活动表 QueryBo
 * </p>
 *
 */
@Data
public class QueryMarketingMemberBo extends BaseBo<MarketingMember> {

    /**
     * ID
     */
    @ApiModelProperty("ID")
    private String id;

    /**
     * 会员活动名称
     */
    @ApiModelProperty("会员活动名称")
    private String name;

    /**
     * 会员活动开始时间
     */
    @ApiModelProperty("会员活动开始时间")
    @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN)
    private LocalDateTime beginDate;

    /**
     * 会员活动结束时间
     */
    @ApiModelProperty("会员活动结束时间")
    @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN)
    private LocalDateTime endDate;

    /**
     * 会员活动类型(1:生日营销; 2:节日营销; 3:会员日营销;)
     */
    @ApiModelProperty("会员活动类型(1:生日营销; 2:节日营销; 3:会员日营销;)")
    private Integer promotionsType;

    /**
     * 会员活动范围(1:当日; 2:当周; 3:当月;)
     */
    @ApiModelProperty("会员活动范围(1:当日; 2:当周; 3:当月;)")
    private Integer scopeType;

    /**
     * 参加方式(1:自动参加:; 2:手动参加; )
     */
    @ApiModelProperty("参加方式(1:自动参加:; 2:手动参加; )")
    private Integer attendType;

    /**
     * 领取模式(1:活动范围内1次; 2:活动范围每日1次)
     */
    @ApiModelProperty("领取模式(1:活动范围内1次; 2:活动范围每日1次)")
    private Integer claimMode;

    /**
     * 是否适应全部会员等级
     */
    @ApiModelProperty("是否适应全部会员等级")
    private Boolean allMemberLevel;

    /**
     * 是否消费积分翻倍
     */
    @ApiModelProperty("是否消费积分翻倍")
    private Boolean consumeScoreFlag;

    /**
     * 积分倍率
     */
    @ApiModelProperty("积分倍率")
    private Integer consumeScoreRate;

    /**
     * 是否直接赠送积分
     */
    @ApiModelProperty("是否直接赠送积分")
    private Boolean scoreFlag;

    /**
     * 赠送积分
     */
    @ApiModelProperty("赠送积分")
    private Integer scoreValue;

    /**
     * 是否赠送优惠券
     */
    @ApiModelProperty("是否赠送优惠券")
    private Boolean couponFlag;

    /**
     * 是否消费折扣
     */
    @ApiModelProperty("是否消费折扣")
    private Boolean discountFlag;

    /**
     * 折扣
     */
    @ApiModelProperty("折扣")
    private BigDecimal discountValue;

    @ApiModelProperty("活动状态")
    private Integer marketingState;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = StringPool.DATE_TIME_PATTERN)
    private LocalDateTime createTime;

    public QueryMarketingMemberBo() {

    }

    public QueryMarketingMemberBo(MarketingMember dto) {

        super(dto);
    }

    @Override
    public BaseBo<MarketingMember> convert(MarketingMember dto) {
        return super.convert(dto);
    }

    @Override
    protected void afterInit(MarketingMember dto) {
        long time = DateUtil.date().getTime();
        // 已结束
        if (DateUtil.date(this.endDate).getTime() < time) {
            this.marketingState = 1;
        }
        // 进行中
        else if (DateUtil.date(this.beginDate).getTime() <= time
                && DateUtil.date(this.endDate).getTime() >= time) {
            this.marketingState = 3;
        }
        // 未开始
        else if (DateUtil.date(this.beginDate).getTime() > time) {
            this.marketingState = 2;
        }
    }
}

